import Vue from "vue"
import {
	mapState,
	mapGetters
} from 'vuex'
import {
	getPageDetail
} from "@/api/common"
import util from "@/libs/util.js";
// Make sure to pick a unique name for the flag
// so it won't conflict with any other mixin.
if (!Vue.__my_seo_mixin__) {
	Vue.__my_seo_mixin__ = true
	Vue.mixin({
		async asyncData({
			$axios,
			store,
			route,
			query,
			req,
			res,
			redirect,
			params
		}) {
			//只有路由跳转 才会走这里
			console.log(`seo混淆,监听页面跳转路由:${route.path}`)
			let data = await getPageDetail($axios, {
				path: route.path == '/en/' ? '/en' : route.path
			}).catch(err => {
				return {}
			});
			let seoData = {
				noPage: true
			};
			if (data) {
				seoData = data.data ? {
					noPage: false,
					title: data.data.seoTitle,
					keywords: data.data.seoKeyword,
					description: data.data.seoDescription,
					pageContent: data.data.content
				} : {
					noPage: true
				};

			}
			store.commit("setSeo", seoData);
			store.commit('SET_LANG', route.path.startsWith('/en') ? 'en_US' : 'zh_CN');
			return {};
		},
		computed: {
			...mapGetters([
				'userInfo', 'userId', 'token'
			]),
			dateFormat() {
				return function(start, end) {
					if (!start) {
						return "";
					}
					const s = this.$dayjs(start);
					const e = this.$dayjs(end);
					if (!end) {
						return `${s.format("YYYY/MM/DD")}`;
					}
					if (s.year() != e.year()) {
						//年份不相同
						return `${s.format("YYYY/MM/DD")}-${e.format("YYYY/MM/DD")}`;
					}
					if (s.month() != e.month()) {
						//月份不相同
						return `${s.format("YYYY/MM/DD")}-${e.format("MM/DD")}`;
					}
					if (s.date() != e.date()) {
						//日期不相同
						return `${s.format("YYYY/MM/DD")}-${e.format("DD")}`;
					}
					return `${s.format("YYYY/MM/DD")}`;
				}
			},

			/* 详情回显使用 传入数据字典集合  返回label 多个按 separator 分隔符返回*/
			dictLabel(list, value, separator = ",") {
				return (list, value, separator = ",") => {
					console.log(list)
					let p = this.locale === 'en_US' ? 'labelEn' : 'label';
					if (value != '' && value != null && value != undefined && list && list.length > 0) {
						const values = (value + "").split(',');
						let arr = list.filter((e) => {
							return values.includes(e.value + "")
						}).map(item => item[p]);
						if (arr && arr.length > 0) {
							return arr.join(separator);
						}
					}
					return '';

				}
			},
			/* 详情回显使用 传入数据字典集合  返回label集合*/
			dictLabelList(list, value) {
				return (list, value) => {
					let p = this.locale === 'en_US' ? 'labelEn' : 'label';
					if (value != '' && value != null && value != undefined && list && list.length > 0) {
						const values = (value + "").split(',');
						let arr = list.filter((e) => {
							return values.includes(e.value + "")
						}).map(item => item[p]);
						return arr;
					}
					return [];

				}
			},
			isLogin() {
				return this.token ? true : false;
			},
			locale() {
				return this.$store.state.locale
			},
			// 中文站
			localeCn() {
				return this.locale === 'zh_CN' ? true : false
			},
			// 英文站
			localeEn() {
				return this.locale === 'en_US' ? true : false
			},
			// 依据lang自动添加前缀/en
			urlPrefix() {
				let pre = ''
				if (this.localeEn) {
					pre = "/en"
				}
				return pre
			},
			// 依据lang自动添加后缀En
			nameSuffix() {
				let suf = ''
				if (this.localeEn) {
					suf = "En"
				}
				return suf
			},
			splitFirst() {
				return (v) => {
					if (!v) return '';
					return v.split(',')[0];
				}
			},
			split2Arr() {
				return (v) => {
					if (!v) return []
					return v.split(',');
				}
			},

			// 日期时间格式化
			parseTime() {
				return (v) => {
					if (!v) return
					return util.parseTime(v)
				}
			},
			// 只返回日期
			parseDate() {
				return (v) => {
					if (!v) return
					return util.parseTime(v, "{y}-{m}-{d}")
				}
			},
			// 只返回月日
			parseMonthDay() {
				return (v) => {
					if (!v) return
					return util.parseTime(v, "{m}/{d}")
				}
			},
			// 只返回年
			parseYear() {
				return (v) => {
					if (!v) return
					return util.parseTime(v, "{y}")
				}
			},
			// 只返回月
			parseMonth() {
				return (v) => {
					if (!v) return
					return util.parseTime(v, "{m}")
				}
			},
			// 只返回日
			parseDay() {
				return (v) => {
					if (!v) return
					const day = util.parseTime(v, "{d}")
					if (day[0] == 0) {
						return day[1]
					} else {
						return day
					}

				}
			},
			numberSplit() {
				return (v) => {
					if (!v) return
					return v.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
				}
			},
			isMobile() {
				return this.$store.state.deviceType
			},
			// 手机号码隐私保护 136********
			hideMobileTail() {
				return (params) => {
					if (!params) return;
					return params.slice(0, 3) + '********'
				}
			},
			// 手邮箱隐私保护 136********@11.com
			hideEmailTail() {
				return (params) => {
					if (!params) return;
					return params.slice(0, 3) + '********' + params.slice(params.indexOf('@'))
				}
			},
			path() {
				return this.$route.path
			},
			/**
			 * 是否是首页
			 * true: 是
			 * false：不是
			 */
			isHome() {
				if (this.localeCn) {
					return this.path === '/' ? true : false
				} else {
					return this.path === '/en' ? true : false
				}
			},
			menuList() {
				return this.$store.state.app.menuList
			},
			/** 
			 * 在数组对象中依据 value 查找对应的 label,只适合id唯一的情况
			 * @list 是数据列表
			 * @val value值
			 */
			findLabelFromVal() {
				return (list, val) => {
					if (val == undefined || val == null) { //此处可能会有0值
						return '';
					}
					if ((!list) || list.length == 0) {
						return '';
					}
					let data = list.find((item) => {
						return item.value == val
					})
					return data ? data['label'] : ''
				}
			},
			// 起止时间
			dateTime() {
				return (start, end) => {
					if (!start || !end) {
						return "";
					}
					return `${util.joinSameDate(
						util.replaceDateDivision(start) +
						" - " +
						util.replaceDateDivision(end)
					)}`;
				};
			},
			// 相同年、月进行合并
			dateStartEnd() {
				return (start, end) => {
					if (!start || !end) {
						return "";
					}
					return util.joinDate(start, end)
				};
			},
			// 相同年、月进行合并--英文合并日期
			dateStartEndEn() {
				return (start, end) => {
					if (!start || !end) {
						return "";
					}
					return util.joinDateEn(start, end)
				};
			},
			website() {
				return (v) => {
					if (!v) return
					return v.replace(/http[s]?:\/\//i, '')
				}
			},
			// 使用顿号对数组进行拼接
			joinDot() {
				return (v) => {
					if (!v) return ''
					return v.join('、')
				}
			},
			// 如果是多个时只取第一个
			oneOrMore() {
				return param => {
					if (!param) return ''
					if (param.indexOf(',') !== -1) {
						return param.split(',')[0]
					} else {
						return param
					}
				}
			},
			// 需求的最新标记
			isNew() {
				return (date) => {
					if (!date) return
					const days = 7 // 相差的天数小于这个天数为最新
					let startTime = new Date(date); // 创建时间
					let currentTime = new Date(); // 当前时间
					return (currentTime - startTime) / 1000 / 60 / 60 / 24 < days;
				}
			},
			defaultLogo() {
				return require('@/assets/img/logo-big.svg')
			},
			defaultImg() {
				return require('@/assets/img/logo-big.svg')
			},
			defaultLogoWhite() {
				return require('@/assets/img/logo-big-white.png')
			}
		},
		data() {
			return {
				langs: {
					"tip": {
						"zh_CN": "系统提示",
						"en_US": "System reminder"
					},
					"ok": {
						"zh_CN": "确定",
						"en_US": "Ok"
					},
					"cancel": {
						"zh_CN": "取消",
						"en_US": "Cancel"
					},
				}
			}
		},
		mounted() {

		},
		methods: {
			// 显示搜索输入框
			showSearchBox() {
				this.$store.commit('submitShowSearchBox', true)
			},
			// 隐藏搜索输入框
			hideSearchBox() {
				this.$store.commit('submitShowSearchBox', false)
			},
			invoke(func, ...params) {
				return func(this.$axios, ...params)
			},
			setLangEn() {
				this.$i18n.locale = "en_US";
				this.$store.commit('SET_LANG', this.$i18n.locale);
			},
			setLangCn() {
				this.$i18n.locale = "zh_CN";
				this.$store.commit('SET_LANG', this.$i18n.locale);
			},
			switchLang() {
				if (this.$i18n.locale == "zh_CN") {
					this.$i18n.locale = "en_US";
				} else {
					this.$i18n.locale = "zh_CN";
				}
				this.$store.commit('SET_LANG', this.$i18n.locale);
			},
			/** 依据链接地址进行跳转
			 * 有手机链接并且是手机端时，跳转手机端
			 * 否则跳转pc端
			 */
			jumpMoreMedia(item) {
				let path = item.wapUrl
				// 中文
				if (this.localeCn) {
					// 如果是手机端并且手机端链接不为空，就走手机端
					if (this.isMobile && item.wapUrl) {
						path = item.wapUrl
					} else {
						path = item.pcUrl
					}
				} else {
					path = item.wapUrlEn
					// 如果是手机端并且手机端链接不为空，就走手机端
					if (this.isMobile && item.wapUrlEn) {
						path = item.wapUrlEn
					} else {
						path = item.pcUrlEn
					}
				}

				if (path) {
					window.open(path, '_blank')
				}
			},
			// 新页面打开跳转页面
			jumpNormalBlank(pathOut) {
				let path = pathOut
				if (this.localeEn) {
					path = `/en${pathOut}`
				}
				let routeUrl = this.$router.resolve({
					path
				})
				window.open(routeUrl.href, '_blank')
			},
			// 跳转页面
			jumpNormalPage(pathOut) {
				let path = pathOut
				if (this.localeEn) {
					path = `/en${pathOut}`
				}
				this.$router.push({
					path
				})
			},
			// 跳转外部链接
			jumpOutLink(href) {
				window.open(href, '_blank')
			},
			goHomeSelf() {
				window.open(this.$router.resolve({
					path: this.urlPrefix + '/'
				}).href, '_self');
			},
			backPage() {
				this.$router.go(-1);
			},
			back() {
				this.$router.go(-1);
			},
			// 列表交互操作后重新加载列表数据
			updateGetListFun() {
				this.form.pageNum = 1;
				this.list = [];
				this.finished = false;
				this.total = 0;
				this.getListFun()
			},
			// 去往英文站
			go2En() {
				let routeUrl = this.$router.resolve({
					path: `/en`
				})
				window.open(routeUrl.href, '_blank')
			},
			// 去往中文站
			go2Cn() {
				let routeUrl = this.$router.resolve({
					path: `/`
				})
				window.open(routeUrl.href, '_blank')
			},
			// 去往日文站
			go2Ja() {
				let routeUrl = this.$router.resolve({
					path: `/en/jp`
				})
				window.open(routeUrl.href, '_blank')
			},
			// 去往韩文站
			go2Ko() {
				let routeUrl = this.$router.resolve({
					path: `/en/kr`
				})
				window.open(routeUrl.href, '_blank')
			},
			// 去往登录
			go2Login() {
				this.jumpNormalPage(`/login`)
			},
			// 去往注册
			go2Reg() {
				this.jumpNormalBlank(`/register`)
			},
			// 去往密码重置
			go2Reset() {
				this.jumpNormalBlank(`/reset`)
			},
			// 去往个人中心
			go2Member() {
				this.jumpNormalBlank(`/member/userInfo`)
			},
			logout() {
				util.logout(this);
			},
			// 导航跳转链接
			openPage(v) {
				if (v.url) {
					//外链
					window.open(v.url, v.newWindow == '1' ? '_blank' : '_self');
				} else {
					// 内部路由
					if (!v.path) return
					util.pageChange(this.$router, `${v.path}`, {}, v.newWindow == '1' ? '_blank' : '_self');
				}
			},
			// 去往详情
			go2Intro() {
				this.jumpNormalBlank(`/page/showInformation`)
			},

			// 去往展商列表
			go2Exhibitor() {
				this.jumpNormalBlank(`/page/exhibitor`)
			},
			// 去往展商详情
			go2ExhibitorDetail(item) {
				this.jumpNormalBlank(`/page/exhibitor/${item.id}`)
			},

			// 去往展品列表
			go2Product() {
				this.jumpNormalBlank(`/page/product`)
			},
			// 去往展品详情
			go2ProductDetail(item) {
				this.jumpNormalBlank(`/page/product/${item.id}`)
			},
			// 去往需求列表
			go2Demand(demandType) {
				let path = this.localeCn ? '/page/demand' : '/en/page/demand'
				if (demandType) {
					path = this.localeCn ? `/page/demand?demandType=${demandType}` :
						`/en/page/demand?demandType=${demandType}`
				} else {
					path = this.localeCn ? `/page/demand?demandType=1,2` : `/en/page/demand?demandType=1,2`
				}
				let routeUrl = this.$router.resolve({
					path: path,
				})
				window.open(routeUrl.href, '_blank')
			},
			// 去往需求发布
			go2DemandPublish() {
				if (!this.isLogin) {
					this.$confirm(this.$t("demand-login-tip"), this.langs["tip"][this.locale], {
						confirmButtonText: this.langs["ok"][this.locale],
						cancelButtonText: this.langs["cancel"][this.locale],
						type: "warning",
					}).then(() => {
						this.jumpNormalPage(`/login`)
					})
					return
				}
				this.jumpNormalPage(`/page/demand/publish`)
			},
			// 去往需求编辑
			go2DemandEdit(item) {
				this.jumpNormalPage(`/page/demand/publish?id=${item.id}&type=${item.type}`)
			},
			// 去往需求详情
			go2DemandDetail(item) {
				this.jumpNormalBlank(`/page/demand/${item.id}`)
			},
			// 去往个人中心需求详情
			go2DemandEditDetail(item) {
				this.jumpNormalBlank(`/member/demand/${item.id}`)
			},
			// 去往活动列表
			go2Activity() {
				this.jumpNormalBlank(`/page/activity`)
			},
			// 去往活动详情
			go2ActivityDetail(item) {
				this.jumpNormalBlank(`/page/activity/${item.id}`)
			},
			// 活动报名
			joinActivity(item) {
				this.jumpMoreMedia(item)
			},

			// 去往新闻列表
			go2News() {
				this.jumpNormalBlank(`/page/newsCenter`)
			},
			// 去往新闻详情
			go2NewsDetail(item) {
				// 有外链走外链，没外链走详情
				if (item.url) {
					this.jumpOutLink(item.url)
				} else {
					this.jumpNormalBlank(`/page/newsCenter/${item.id}`)
				}
			},
			// 去往展位图列表
			go2Booth() {
				this.jumpNormalBlank(`/page/booth-floor`)
			},
			// 去往展位图列表
			go2Ecosystem() {
				this.jumpNormalBlank(`/page/ecosystem`)
			},
			// 小样详情
			go2SampleDetail() {

			},
			// 询盘详情
			go2InquiryDetail() {

			},
			// 去往合作伙伴
			go2Partner() {
				this.jumpNormalBlank(`/page/partners`)
			},
		},
	}) // Set up your mixin then
}